package com.power.sifa.approve.service;

import com.power.sifa.approve.model.Aprv_process_materials;
import org.springframework.data.domain.Page;
import com.power.sifa.approve.model.Apl_dossier;
import com.power.sifa.approve.model.pageInfo.Apl_dossierPageInfo;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 *  电子卷宗业务层
 */
public interface Apl_dossierService {

    /**
     *  根据id获取电子卷宗对象
     */
    Apl_dossier getById(Serializable id);

    /**
     *  根据传入电子卷宗对象进行新增或更新操作
     */
    void saveOrUpdate(Apl_dossier apl_dossier);

    /**
     *  根据id删除电子卷宗
     */
    void removeById(Serializable id);

    /**
     *  根据传入条件查询电子卷宗分页结果
     */
    Page<Apl_dossier> findAll(Apl_dossierPageInfo pageInfo);

    /**
     * 查询全部电子卷宗
     */
    List<Apl_dossier> findAll();

     /**
     *  根据id批量删除电子卷宗
     */
    void removeByIds(List<Integer> list);

     /**
     *  批量保存电子卷宗
     */
    void saveAll(List<Apl_dossier> list);


    /**
     * 通过applyid查询对应的电子卷宗文件树形结构
     * @param applyid applyid
     * @return
     */
    List<Apl_dossier> getDocTreeListByApplyid( String applyid);


    /**
     * 通过父级节点的id查询树层级数据
     * @param parentId
     * @return
     */
    List<Apl_dossier> getDocTreeListByParentId(String parentId);

    /**
     * 删除树层级节点
     * @param treeNodeId
     */
    void deleteTreeNode(String treeNodeId);


    /**
     * 新增树层级节点
     * @param treeNodeType
     * @param treeNodeName
     * @param parentId
     * @throws Exception
     */
    Apl_dossier addTreeNode(Integer treeNodeType, String treeNodeName, String parentId) throws Exception;

    /**
     * 新增树根级节点
     * @param applyid
     * @param treeNodeName
     * @param parentId
     * @throws Exception
     */
    Apl_dossier addRootTreeNode(String applyid, String treeNodeName, String parentId) throws Exception;


    /**
     * 保存材料到对应的节点
     * @param applyid
     * @param parentId
     * @param materialId
     * @param materialName
     * @param deleted
     * @param mattype
     * @return
     * @throws Exception
     */
    Apl_dossier saveMaterialToTree(String applyid, String parentId, String materialId, String materialName,Integer deleted, String mattype) throws Exception;


    /**
     * 更新节点名称
     * @param treeNodeId
     * @param treeNodeName
     */
    Apl_dossier updateTreeNodeName( String treeNodeId, String treeNodeName);

    /**
     * 初始化电子卷宗数据（行政复议）
     * @param applyid
     */
    void buildInitDossier(String applyid);

    /**
     * 更新电子卷宗申请和过程材料
     * @param applyid
     */
    void updateDossier(String applyid, Integer serviceType);


    /**
     * 查询归档所需材料
     * @param applyid
     * @return
     */
    Map<String, List<Aprv_process_materials>> queryMaterial(String applyid);

    /**
     * 格式化树结构
     * @param dossierList
     * @return
     */
    List<Map<String, Object>> formateTreeStruct(List<Apl_dossier> dossierList);

    /**
     * 重新设置树的页码结构
     */
    List<Apl_dossier> updateTreeIndex(String applyid);


    /**
     * 案件归档接口
     * @param applyid
     * @param userId
     * @param userName
     */
    void recordCase(String applyid, String userId, String userName, Integer serviceType);


    /**
     * 初始化电子卷宗数据（复议监督）
     * @param applyid
     */
    void buildInitSuperviseDossier(String applyid);
}
